package Day003_多态_内部类.demo010代码块;

/*
    代码块:
           构造代码块:
                    格式: {}
                    位置: 类中方法外
                    执行: 每次调用构造方法,优先于构造方法的执行
                    场景: 例如 统计对象的创建个数

           静态代码块:
                    格式: static {}
                    位置: 类中方法外
                    执行: 随着类的加载而执行,且只执行一次 优先于main方法
                    场景: 例如 加载驱动的代码 一般放在静态代码块中(javaWeb Mysql数据库)
           局部代码块:
                    格式: {}
                    位置: 方法中
                    执行: 每次调用方法时,执行方法体,按顺序执行
                    场景: 提前释放内存,可以起到节省内存左右,但现在一般不用
 */

public class Test {
    public static void main(String[] args) {
        //1.构造代码块 每次调用构造方法,优先于构造方法的执行
        Person p = new Person();

        System.out.println("---------");

        Person p1 = new Person();

        //2.静态代码块 随着类的加载而执行,且只执行一次
        Student stu = new Student();

        System.out.println("----------");

        Student syu1 = new Student();
        //执行顺序: 静态代码块 > 构造代码块 > 构造方法


        //3.局部代码块 每次调用方法时,执行方法体,按顺序执行

        //这种方式num的作用域:40行到底52行,等到main方法执行完毕,才会释放num占用的空间
        int num = 10;
        System.out.println("num"); //10
        //以后都不在使用num了

        {   int num2 = 20;
            System.out.println(num2); //20
            System.out.println("局部代码块1");
        }
            //num2不能再次使用了
        {
            System.out.println("局部代码块2");
        }
    }
}
